Wie ändert man eigentlich eine UUID einer Platte oder Partition und wieso macht man das überhaupt?
Wie man Partitionen neue/alte UUIDs gibt
Zur Zeit habe ich ein spannendes Projekt, bei dem soviel schief geht, daß man aus dem Lernen und kreativ sein, gar nicht mehr rauskommt 🙂 Als Hintergrund müßt Ihr nur wissen, daß wir einen Hotstand-by-Server für einen Kunden realisieren, der in einem anderem Rechenzentrum und Netzsegment steht. Er hat also nicht die gleiche IP, nicht die gleiche MAC usw. aber alle Configs sollen gleich sein, damit alles reibungslos klappt, wenn man dahin umschaltet.
„Warum? Damit die Kiste noch bootet“
So ein Server hat nicht nur eine Webseite, sondern tausende davon, dazu Mailkonten, FTP Zugänge, SSH Benutzer usw. usw. Dies bedeutet, daß eine Menge an Konfigurationen zwischen den Servern synchronisiert werden müssen, wo man ganz leicht den Überblick verlieren kann und so Dateien auf dem Hotstand-by-Server nicht auf Stand wären.
Daher haben wir uns zu einem Full-Sync entschieden, soweit das geht. D.h. es werden alle Dateien des Server gesynct, außer denen die absolut nicht geändert werden dürfen z.b. die Netzwerkkonfiguration. Dies minimiert Fehlerquellen, erzwingt aber 1:1 Hardware und, ob man es glaubt oder nicht, auch die gleichen Festplattenreihenfolge.
Jetzt haben wir eine frische VM auf dem externen Server erstellt, was bedeutet der hat seine Platte frisch Partitioniert und formatiert. Die unterscheidet sich aber von der auf dem Originalserver und das würde nach dem Sync von /etc/ dazu führen, daß der Server nicht mehr bootet, weil die /etc/fstab so aussieht:
#
# /etc/fstab
# Created by anaconda on Thu Mar 3 13:22:46 2016
#
# Accessible filesystems, by reference, are maintained under ‚/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=17b8949a-60ad-422f-8b9b-f7b9da7f36fe / ext4 defaults,usrquota 1 1
UUID=614da79b-c6c6-4534-b673-fbec98089270 swap swap defaults 0 0
devtmpfs /opt/root/dev devtmpfs rw,nosuid,mode=755 0 0
proc /opt/root/proc proc rw,nosuid,nodev,noexec,relatime 0 0
Wie man leicht erkennen kann, ist die Systemplatte per UUID eingebunden, und da es eine andere Partition ist, haben wir auch eine andere UUID. Das müssen wir ändern, also schauen wir auf dem normalen Server mal nach, wie denn die UUID ist:
$ lsblk -f NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS sdb ├─sdb1 ├─sdb2 ext4 1.0 17b8949a-60ad-422f-8b9b-f7b9da7f36fe 264,1G 59% / └─sdb3 swap 1 614da79b-c6c6-4534-b673-fbec98089270 [SWAP]
Wir haben also zwei Partitionen mit UUIDs, genau wie in der /etc/fstab ( was für ein Zufall 😉 ).
Wenn Ihr das selbst versucht, Ihr werdet andere Partitionen haben und das nicht 1:1 nachmachen können!
Da haben wir eine ext4 und eine swap Partition und damit auch gleich das erste Problem, wie Ihr gleich feststellen werdet, aber eins nach dem anderen. Zuerst setzen wir mal die neue UUID für ext4:
tune2fs -U 17b8949a-60ad-422f-8b9b-f7b9da7f36fe /dev/sdb2
Wenn man jetzt „tune2fs -U 614da79b-c6c6-4534-b673-fbec98089270 /dev/sdb3“ macht, weil das bei sdb2 so gut geklappt hat, dann wird tune2fs das mit einer Fehlermeldung verweigern :
tune2fs 1.47.0 (5-Feb-2023)
tune2fs: Ungültige magische Zahl im Superblock beim Versuch, /dev/sdb3 zu öffnen
/dev/sdb3 hat ein swap-Dateisystem
Es muß also einen anderen Weg geben, einer Swap Partition eine neue UUID zu verpassen… welcher könnte das sein?
Das SWAPLABEL
Holen wir uns doch erst einmal die UUID, wenn wir schon dabei sind:
$ swaplabel /dev/sdb3
UUID: 614da79b-c6c6-4534-b673-fbec98089270
und genauso leicht kann man die auch ändern:
$ swaplabel –uuid 614da79b-c6c6-4534-b673-fbec98089270 /dev/sdb3
Jetzt darf man auf keinen Fall vergessen die /etc/fstab anzupassen, sonst stehen da die alten UUIDs drin und das System bootet nicht mehr. Wenn man natürlich jetzt den Sync von /etc/ anwirft, erübrigt sich das natürlich 😉
Für ReiserFS und andere Filesysteme gibt es teilweise Spezialtools, die mit dem Filesystem zusammen ausgeliefert werden. Wer das mit einem grafischen Werkzeug wie GParted oder Gnome-Disks machen möchte, muß nicht mal wissen, was für ein Filesystem er da vor sich hat.
Apropos neue UUIDs geben, das geht so:
tune2fs -U $(uuidgen) /dev/sdxX
Je nach Distro (hier Fedora) die Ihr verwendet, kann der Befehl auch nur „uuid“ heißen.